STRUCTURA REPETITIVA

Exista trei tipuri de structuri repetitive:

1) Structura cu numar cunoscut de repetitii (FOR)

2) Structura cu numar necunoscut de repetitii si cu test initial (WHILE)

3) Structura cu numar necunoscut de repetitii si cu test final (DO-WHILE)

  • STRUCTURA REPETITIVA CU NUMAR CUNOSCUT DE PASI - FOR

Se citeste un numar n natural. Sa se calculeze suma primelor n numere natural

// suma primelor n numere naturale

#include <iostream.h>

void main ()

{

int n,i,s=0;

cin>>n; // citim n

for (i=1; i<=n; i++)

s=s+i;

cout << endl<<s;

}

  • STRUCTURA REPETITIVA CU TEST INITIAL WHILE

Exemplu : Se citesc doua numare a si b, naturale. Sa se calculeze cmmdc(a,b) si smmmc(a,b)

// cmmdc(a,b) -algoritmul lui Euclid

#include<iostream>
using namespace std;

main ()

{

int a,b,rest,aa,bb,d,m;

cin>>a>>b; // aici citim a si b

aa=a;bb=b;
while(bb>0)
{d=aa%bb;
aa=bb;
bb=d;}
d=aa;
m=a*b/d;
cout<<d<<' '<<m;

}


//sau cmmdc(a,b) - scaderi repetate

#include<iostream>
using namespace std;
main()
{ int a,b,aa,bb,d,m;
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;
aa=a;bb=b;
while(aa!=bb)
if (aa>bb)aa=aa-bb;
else bb=bb-aa;
d=aa;
m=a*b/d;
cout<<d<<' '<<m; }


  • STRUCTURA REPETITIVA CU TEST FINAL DO - WHILE

Exemplu : Se citesc doua numare a si b, naturale. Sa se calculeze cmmdc(a,b)

// cmmdc(a,b)

#include <iostream.h>

void main ()

{

int a,b,rest;

cin>>a>>b; // aici citim a si b

do

{ rest=a%b;

a=b;

b=rest;

}

while (rest!=0)

cout << endl<<a;

}



FACILITĂŢI DE ÎNTRERUPERE A UNEI SECVENŢE
Pentru o mai mare flexibilitate (tratarea excepţiilor care pot apare în procesul de prelucrare), în limbajul C se utilizează instrucţiunile break şi continue. Ambele instrucţiuni sunt utilizate în instrucţiunile ciclice. În plus, instrucţiunea break poate fi folosită în instrucţiunea switch.

q Instrucţiunea break
Instrucţiunea break "forţează" ieşirea din instructiunea ciclică
q Instrucţiunea continue
Întâlnirea instrucţiunii continuedetermină ignorarea instrucţiunilor care o urmează în corpul instrucţiunii ciclice şi reluarea execuţiei cu testarea valorii expresiei care determină repetarea sau nu a corpului ciclului.


break.jpg






Probleme structuri repetitive

Sume si produse
s1=1*2+2*3+3*4+…+(n-1)*n
s2=12+22+32+…+n2

S3 = 1/1+ ½ + 1/3 + … + 1/n (n dat)
S4 = x1 + x2 + x3 + …+xn (x,n date)

s5=1/2+2/3+3/4+…+n/(n+1)
s6=2-3+4-5+…-99+100
S7 = 2/2! - 4/4! + 6/6!+…+(-1)n+1 2n/(2n)!
S8 = 13 – 33 + 53 - … (n termeni)
S9 = 12 – 22 + 32 – 42 +…(n termeni)
S10 = 1! + 2! + 3! +…+ n! (n dat)
S11 = 1*2 + 2*3 + 3*4 + …+ n( n+1) (n dat)

P1 = x(x+1)(x+2)(x+3)…(x+n) (x,n date)
P3 = (x-2)(x-4)(x-8)…(x-64) / (x-1)(x-3)(x-7)…(x-63), (x dat)
n!=1*2*3…*n (n factorial)
  1. Divizibilitate
a) Numere prime:
  1. Generati primele n numere prime
  2. Determinați numerele prime din intervalul [a,b]
  3. Determinati factorul prim care apare la puterea cea mai mare in descompunerea lui N in factori primi
  4. Descompuneti numarul N in factori primi
  5. Afisati toate numerele prime mai mici sau egale cu N care citite invers sunt tot numere prime
  6. Doua numere prime impare consecutive se numesc prime gemene. Determinati perechile de numere prime gemene mai mici sau egale cu K
b) Divizori
  1. Verificati daca N este perfect (egal cu suma divizorilor sai fara el insusi)
  2. Determinati numerele de forma abab divizibile cu N dat.
  3. Determinati cmmdc, cmmmc a 2 numere ( cmmmc (a,b) = a*b/cmmdc(a,b) )
  4. Determinati toti divizorii comuni a 2 numere
  5. Determinati cel mai mic si cel mai mare divizor propriu al lui N (divizor propriu = divizor diferit de 1 si el insusi)
c) Prelucrarea cifrelor unui numar

  1. Pentru N dat afisati cifrele care apar in componenta sa si frecventa lor de aparitie
  2. Afisati prefixele si sufixele unui numar N
  3. Verificati daca un numar N e “bine ordonat” (cifrele sale citite de la dreapta la stanga sunt sau in ordine crescatoare, sau numai descrescatoare)
  4. Pentru numarul N dat, construiti numarul obtinut prin eliminarea cifrelor sale pare
  5. Determinati produsul interior al unui numar (produsul cifrelor sale, fara prima si fara ultima sa cifra)
  6. Cifra de control a unui număr (insumarea cifrelor pana cand se obtine un numar cu o singura cifra).
d)Prelucrarea numerelor dintr-un interval

  1. Afisati numerele mai mici decat n care au ultima cifra 3 (n dat) ex. n=128 => 3, 13, 23, 33, 43, 53, 63, 73, 83, 93, 103, 113, 123
  2. Afisati elementele din intervalul [a;b] care sunt divizibile cu k (a,b,k date)
  3. Afisati elementele din intervalul [a;b] care au cifra zecilor mai mica decat cifra unitatilor (a,b date)
  4. Dintre numerele mai mici ca n, afisati-le pe cele care sunt “echilibrate” (au prima cifra egala cu ultima)
e) Probleme care prelucreaza n numere
  1. Se citesc n numere. Determinati maximul, minimul dintre ele si cu ce cifra se termina produsul dintre maxim si minim
  2. Se citesc n numere. Cate sunt pare, cate impare si cate au exact o cifra?
  3. Se citesc n numere. Determinati suma S2a numerelor de pe pozitii pare (al doilea, al patrulea, etc) precum si suma S1 a numerelor de pe pozitii impare
  4. Se citesc n numere. Determinati media aritmetica a numerelor nenule citite.
  5. Se citesc n numere. Cate sunt mai mari decat zero, cate egale cu zero si cate mai mici decat zero, precum si procentul reprezentat de acestea din numarul total de numere.
  6. Se citesc n numere reprezentand notele la BAC ale unui absolvent. Sa se calculeze media si sa se precizeze daca e admis sau nu (e admis daca fiecare nota e cel putin 5, iar media generala e cel putin 6)
6 Diverse
  1. Afisati primele k patrate perfecte (k dat) – ex. k=5 => 1, 4, 9, 16, 25
  2. Afisati primii n termeni din sirul lui Fibonacci: 1,1,2,3,5,8…(n dat)
  3. Afisati cuburile perfecte mai mici ca n (n dat) – ex. n=54 => 1, 8, 27
  4. Se citeste un numar natural n. Determinati cele doua patrate perfecte intre care este
    situat n. Ex. n = 27 => 25 si 36

Probleme folosind structurile repetitive(care se bazează pe prelucrarea cifrelor unui număr)

1. (Sufixele unui număr) Se citeşte un număr natural nenul n, de maxim 8 cifre, de la tastatură. Scrieţi un program C++ care determină şi afişează toate sufixele numărului natural citit iniţial.(sufixele unui număr se obţin prin eliminarea repetată a ultimei cifre)

2. (Câte cifre pare, câte cifre impare) Se citeşte un număr natural nenul n, de maxim 8 cifre, de la tastatură. Scrieţi un program C++ care determină şi afişează câte cifre pare şi câte cifre impare există în numărul citit iniţial. Dacă numărul citit iniţial e format: doar din cifre pare atunci se va afişa mesajul „Nu există cifre impare” doar din cifre impare atunci se va afişa mesajul „Nu există cifre pare”

3. (Media aritmetică a cifrelor pare) Se citeşte un număr natural nenul n, de maxim 8 cifre, de la tastatură. Scrieţi un program C++care determină şi afişează cifrele pare ale numărului citit iniţial, apoi calculează şi afişează media aritmetică a cifrelor pare din numărul citit iniţial.


4. (Căutarea unei cifre) Se citeşte un număr natural nenul n, de maxim 8 cifre, de la tastatură şi o valoarea naturală din intervalul [0,9], în variabila c. Scrieţi un program C++ care verifică dacă cifra c există cel puţin o dată în numărul citit iniţial. Dacă cifra există
se va afişa numărul de apariţii a cifrei c în numărul n, în caz contrar se va afişa mesajul „NU EXISTĂ”.


5. (Cifra minimă) Se citeşte un număr natural nenul n, de maxim 8 cifre, de la tastatură. Scrieţi un program C++ care determină şi afişează cifra minimă din numărul citit iniţial.

6. (Cifra maximă) Se citeşte un număr natural nenul n, de maxim 8 cifre, de la tastatură. Scrieţi un program C++ care determină şi afişează cifra maximă din numărul citit iniţial.

7. (Numărul cifrelor multiplii de m) Se citeşte un număr natural nenul n, de maxim 8 cifre, de la tastatură şi o valoarea naturală din intervalul [1,9], în variabila m. Scrieţi un program C++ care determină şi afişează câţi multiplii de m există în numărul citit iniţial.

8. (Construcţia oglinditului unui număr) Se citeşte un număr natural nenul n, de maxim 8 cifre, de la tastatură. Scrieţi un program C++ care construieşte şi afişează oglinditul numărului citit iniţial.

9. (Număr palindrom) Se citeşte un număr natural nenul n, de maxim 8 cifre, de la tastatură. Scrieţi un program C++ care verifică dacă numărul citit iniţial este număr palindrom. (nu număr se numeşte palindrom dacă numărul iniţial este identic cu oglinditul său)

10. (Permutările circulare e ultimei cifre) Se citeşte un număr natural nenul n, de maxim 8 cifre, de la tastatură. Scrieţi un program C++ care construieşte şi afişează toate numerele obţinute prin permutarea circulară a ultimei cifre din număr.

11. (Eliminarea cifrelor pare) Se citeşte un număr natural nenul n, de maxim 8 cifre, de la tastatură. Scrieţi un program C++care construieşte şi afişează numărul obţinut prin eliminarea cifrelor pare din numărul citit iniţial. Dacă numărul nu conţine nicio cifră pară se va afişa mesajul „Nimic de eliminat!”.

12. (Eliminarea cifrelor impare) Se citeşte un număr natural nenul n, de maxim 8 cifre, de la tastatură. Scrieţi un program C++care construieşte şi afişează numărul obţinut prin eliminarea cifrelor impare din numărul citit iniţial. Dacă numărul nu conţine nicio cifră impară se va afişa mesajul „Nimic de eliminat!”.

13. (Inserarea unei cifre) Se citeşte un număr natural nenul n, de minim 2 cifre şi maxim 8 cifre, de la tastatură şi o valoarea naturală din intervalul [0,9], în variabila c. Scrieţi un program C++ care construieşte un nou număr prin inserarea cifrei c în mijlocul numărului citit iniţial.

Probleme suplimentare

16. (Nr. format din cifre pare) Se citeşte un număr natural nenul n, de maxim 8 cifre, de la tastatură. Scrieţi un program C++ care determină şi afişează numărul format doar din cifrele pare a numărul citit iniţial. Dacă numărul citit iniţial e format doar din cifre impare atunci se va afişa mesajul „Nu există cifre pare”.

17. (Nr. format din cifre impare) Se citeşte un număr natural nenul n, de maxim 8 cifre, de la tastatură. Scrieţi un program C++ care determină şi afişează numărul format doar din cifrele impare a numărul citit iniţial. Dacă numărul citit iniţial e format doar din cifre pare atunci se va afişa mesajul „Nu există cifre impare”.

18. (Cifra de rang par) Se citeşte un număr natural nenul n, de maxim 8 cifre, de la tastatură. Scrieţi un program C++ care determină şi afişează cifrele de rang par din numărul n citit iniţial(rangul unei cifre se determină de la dreapta spre stânga).

19. (Cifra de rang impar) Se citeşte un număr natural nenul n, de maxim 8 cifre, de la. Scrieţi un program C++ care determină şi afişează cifrele de rang impar din numărul n citit iniţial(rangul unei cifre se determină de la dreapta spre stânga).

20. (Minimul şi maximul dintr-o singură parcurgere a cifrelor) Se citeşte un număr natural nenul n, de maxim 8 cifre, de la tastatură. Scrieţi un program C++ care determină şi afişează cifra minimă şi cifra maximă din numărul citit iniţial, printr-o singură prelucrare a cifrelor numărului.

21. (Cifra maximă pară şi impară) Se citeşte un număr natural nenul n, de maxim 8 cifre, de la tastatură. Scrieţi un program C++ care determină şi afişează cifra maximă pară şi impară din numărul citit iniţial, printr-o singură prelucrare a cifrelor numărului.

22. (Cifra minimă pară şi impară) Se citeşte un număr natural nenul n, de maxim 8 cifre, de la tastatură. Scrieţi un program C++ care determină şi afişează cifra minimă pară şi impară din numărul citit iniţial, printr-o singură prelucrare a cifrelor numărului.

23. (Număr de apariţii a cifrei minime) Se citeşte un număr natural nenul n, de maxim 8 cifre, de la tastatură. Scrieţi un program C++ care determină şi afişează numărul de apariţii a cifrei minime din numărul citit iniţial.

24. (Număr de apariţii a cifrei maxime) Se citeşte un număr natural nenul n, de maxim 8 cifre, de la tastatură. Scrieţi un program C++ care determină şi afişează numărul de apariţii a cifrei maxime din numărul citit iniţial.

25. (Cel mai mare număr) Se citeşte un număr natural nenul n, de maxim 8 cifre, de la tastatură. Scrieţi un program C++care determină şi afişează cel mai mare număr format cu ajutorul cifrelor numărului natural citit iniţial.

26. (Cel mai mic număr) Se citeşte un număr natural nenul n, de maxim 8 cifre, de la tastatură. Scrieţi un program C++care determină şi afişează cel mai mic număr format cu ajutorul cifrelor numărului natural citit iniţial.

27. (Cifre egale, identice) Se citeşte un număr natural nenul n, de maxim 8 cifre, de la tastatură. Scrieţi un program C++care verifică dacă cifrele numărului n sunt identice. Dacă cifrele sunt egale între ele se va afişa mesajul „EGALE”, altfel se va afişa mesajul „NU”.

28. (Cifre distincte) Se citeşte un număr natural nenul n, de maxim 8 cifre, de la tastatură. Scrieţi un program C++ care verifică dacă cifrele numărului n sunt toate distincte. Dacă cifrele sunt distincte se va afişa mesajul „DISTINCTE”, altfel se va afişa mesajul „NU”.

29. (Câte cifre distincte) Se citeşte un număr natural nenul n, de maxim 8 cifre, de la tastatură. Scrieţi un program C++ care numără câte cifre distincte are numărul citit iniţial. Dacă toate cifrele sunt distincte atunci se va afişa mesajul „DISTINCTE”, altfel se va afişa numărul de apariţii a fiecărei cifre distincte.

30. (Cifre comune) ) Se citesc două numere naturale nenul n şi m, de maxim 8 cifre, de la tastatură. Scrieţi un program C++ care numără şi afişează câte cifre comune au cele două numere.